# 作者： 李泉志
# 2025年01月05日18时51分秒
# 2947029073@qq.com

"""
3.1 字典的定义
• dictionary（字典）是除列表以外Python之中最灵活的数据类型
• 字典同样可以用来存储多个数据
    – 通常用于存储描述一个物体的相关信息
• 和列表的区别
    – 列表是有序的对象集合
    – 字典是无序的对象集合
• 字典用 {} 定义
• 字典使用 键值对 存储数据，键值对之间使用','分隔
    – 键 key 是索引，必须是不可变类型，往往是字符串
    – 值 value 是数据
    – 键和值之间使用':'分隔
    – 键必须是唯一的
    – 值可以取任何数据类型，但键只能使用字符串、数字或元组
"""


def dict_demo():
    # 定义字典：key是name、age等，value是小明、18等
    xiaoming = {'name': '小明', 'age': 18, 'gender': '男'}
    print(xiaoming)  # 没有xiaoming[0]

    # 1.取值
    print(xiaoming['name'])  # 输出小明

    # 2.增、改
    xiaoming['age'] = 23  # key存在就修改
    xiaoming['city'] = '北京'  # key不在就新增
    print(xiaoming)

    # 3.删，key不存在会报错
    print(xiaoming.pop('city'))  # 删除key为city的项.pop返回删除的键的值
    print(xiaoming)

    # 4.统计键值对个数
    print(len(xiaoming))

    # 5.合并：不一样的合并，一样的覆盖
    temp_dict = {'height': 1.75, 'age': 20}
    xiaoming.update(temp_dict)  # 不能用 +=
    print(xiaoming)

    # 6.清空字典
    xiaoming.clear()
    print(xiaoming)


# 遍历
def dict_iter():
    xiaoming = {'name': '小明', 'age': 18, 'gender': '男'}
    for k in xiaoming:  # k为key
        print(k, xiaoming[k])
    print('-' * 50)

    for k in xiaoming.keys():
        print(k)
    print('-' * 50)

    for v in xiaoming.values():
        print(v)
    print('-' * 50)

    for kv in xiaoming.items():
        print(kv)
    print('-' * 50)

    for k, v in xiaoming.items():
        print(k, v)



def use_list_dict():
    card_list = [{'name': '小明', 'age': 18, 'gender': '男'},
                 {'name': '小红', 'age': 19, 'gender': '女'}]
    for card in card_list:
        print(card)
    print('-' * 50)

    for card in card_list:
        print(card['name'], card['age'], card['gender'])


if __name__ == '__main__':
    # dict_demo()
    # dict_iter()
    use_list_dict()